package Map;

import java.util.HashMap;
import java.util.Map;

public class TestMap {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<>();
        //注意：这里的K一定是可比较的，因为Map的底层是一个二叉搜索树  肯定要比较才能存放
        m.put("西红柿","番茄");
        m.put("马铃薯","土豆");
        System.out.println(m.size());
        System.out.println(m);
        // put(key,value): 注意key不能为空，但是value可以为空
        // key如果为空，会抛出空指针异常

        // get(key): 返回key所对应的value
        // 如果key存在，返回key所对应的value
        // 如果key不存在，返回null
        System.out.println(m.get("西红柿"));
        System.out.println(m.get("白菜"));

        //getOrDefault(): 如果key存在，返回与key所对应的value，如果key不存在，返回一个默认值
        System.out.println(m.getOrDefault("null","洋葱"));

        //containKey(key)：检测key是否包含在Map中，时间复杂度：O(logN)
        // 按照红黑树的性质来进行查找
        // 找到返回true，否则返回false
        System.out.println(m.containsKey("西红柿"));
        System.out.println(m.containsKey("冬瓜"));

        // containValue(value): 检测value是否包含在Map中，时间复杂度: O(N)
        // 找到返回true，否则返回false
        System.out.println(m.containsValue("番茄"));
        System.out.println(m.containsValue("生姜"));

        //打印所有的key
        // keySet是将map中的key在Set中返回的
        for (String s:m.keySet()) {
            System.out.println(s+" ");
        }
        System.out.println();

        // 打印所有的value
        // values()是将map中的value放在collect的一个集合中返回的
        for (String s1:m.values()) {
            System.out.println(s1+" ");
        }
        System.out.println();

        // 打印所有的键值对
        // entrySet(): 将Map中的键值对放在Set中返回了
        for (Map.Entry<String,String> entry:m.entrySet()) {
            System.out.println(entry.getKey()+"->"+entry.getValue());
        }
    }
}
